Streaming over RTSP
Problems running the pipelines shown on this page? Please see our
GStreamer Debugging guide for help
.
This wiki shows two ways of streaming with RTSP: Using gst-rtsp-server and RidgeRun's GStreamer element rtspsink
Using rtspsink
GstRtspSink is a RidgeRun GStreamer sink element that publishes one or more RTSP streams from a single pipeline. It is designed for embedded Linux systems that need video streaming, synchronized audio and video, multicast delivery, authentication, and easy integration into both gst-launch prototypes and production applications.

Setting up element
Follow the instructions on how to build the element.
H.264
Sender (Dragonwing EVK)
It is possible to capture from different sources:
Stream videotestsrc
Run server on board on localhost:
gst-launch-1.0 -v videotestsrc is-live=true ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse config-interval=-1 ! video/x-h264,mapping=/test ! rtspsink service=8554
Stream from camera connected to JCAM0
gst-launch-1.0 -v qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse config-interval=-1 ! video/x-h264,mapping=/test ! rtspsink service=8554
Stream from file
gst-launch-1.0 -v filesrc location=ngonzalez/camera-test2.mp4 ! qtdemux ! h264parse ! v4l2h264dec ! videoconvert ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse config-interval=-1 ! video/x-h264,mapping=/test ! rtspsink service=8554
Receiver (host PC)
BOARD_IP=board_ip_address
Display video:
gst-launch-1.0 -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
or save video to file:
gst-launch-1.0 -e -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph264depay ! h264parse config-interval=-1 ! qtmux ! filesink location=output.mp4
H.265
Sender (Dragonwing EVK)
Options for capture:
Stream videotestsrc
Run server on board on localhost:
gst-launch-1.0 -v videotestsrc is-live=true ! v4l2h265enc qos=true ! video/x-h265,profile=main,stream-format=byte-stream,alignment=au ! h265parse config-interval=-1 ! video/x-h265,mapping=/test ! rtspsink service=8554
Stream from camera connected to JCAM0
gst-launch-1.0 -v qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h265enc qos=true ! video/x-h265,profile=main,stream-format=byte-stream,alignment=au ! h265parse config-interval=-1 ! video/x-h265,mapping=/test ! rtspsink service=8554
Stream from file
gst-launch-1.0 -v filesrc location=camera-test.mp4 ! qtdemux ! h265parse ! v4l2h265dec ! videoconvert ! v4l2h265enc qos=true ! video/x-h265,profile=main,stream-format=byte-stream,alignment=au ! h265parse config-interval=-1 ! video/x-h265,mapping=/test ! rtspsink service=8554
Receiver (host PC)
BOARD_IP=board_ip_address
Display video:
gst-launch-1.0 -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph265depay ! h265parse ! avdec_h265 ! videoconvert ! autovideosink
or save video to file:
gst-launch-1.0 -e -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph265depay ! h265parse config-interval=-1 ! qtmux ! filesink location=output.mp4
Using gst-rtsp-server
Setting up server
Get dependencies for rtsp server:
sudo apt-get update sudo apt-get install -y git build-essential meson ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstrtspserver-1.0-dev
Clone repository:
git clone https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server.git cd gst-rtsp-server
Build:
meson build ninja -C build
H.264
Sender (Dragonwing EVK)
Capture from:
Stream videotestsrc
Run server on board on localhost:
~/gst-rtsp-server/build/examples/test-launch "videotestsrc is-live=true ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse ! rtph264pay name=pay0 pt=96"
Stream from camera connected to JCAM0
~/gst-rtsp-server/build/examples/test-launch "qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse ! rtph264pay name=pay0 pt=96"
Stream from file
~/gst-rtsp-server/build/examples/test-launch "filesrc location=camera-test.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! v4l2h264enc qos=true ! video/x-h264,profile=high,stream-format=byte-stream,alignment=au ! h264parse ! rtph264pay name=pay0 pt=96"
Receiver (host PC)
BOARD_IP=board_ip_address
Display video:
gst-launch-1.0 -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
or save video to file:
gst-launch-1.0 -e -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph264depay ! h264parse config-interval=-1 ! qtmux ! filesink location=output.mp4
H.265
Sender (Dragonwing EVK)
Stream videotestsrc
Run server on board on localhost:
~/gst-rtsp-server/build/examples/test-launch "videotestsrc is-live=true ! v4l2h265enc qos=true ! video/x-h265,profile=main,stream-format=byte-stream,alignment=au ! h265parse ! rtph265pay name=pay0 pt=96"
Stream from camera connected to JCAM0
~/gst-rtsp-server/build/examples/test-launch "qtiqmmfsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue max-size-buffers=4 leaky=downstream ! v4l2h265enc qos=true ! video/x-h265,profile=main,stream-format=byte-stream,alignment=au ! h265parse ! rtph265pay name=pay0 pt=96"
Stream from file
~/gst-rtsp-server/build/examples/test-launch "filesrc location=camera-test.mp4 ! qtdemux ! h265parse ! avdec_h265 ! videoconvert ! v4l2h265enc qos=true ! video/x-h265,profile=main,stream-format=byte-stream,alignment=au ! h265parse ! rtph265pay name=pay0 pt=96"
Receiver (host PC)
BOARD_IP=board_ip_address
Display video:
gst-launch-1.0 -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph265depay ! h265parse ! avdec_h265 ! videoconvert ! autovideosink
or save video to file:
gst-launch-1.0 -e -v rtspsrc location=rtsp://$BOARD_IP:8554/test latency=100 ! rtph265depay ! h265parse config-interval=-1 ! qtmux ! filesink location=output.mp4